﻿using Persistencia;
using System;
using System.Collections.Generic;
using System.Data.Linq.SqlClient;
using System.Linq;
using System.Text;

namespace Dlls
{
    public class PessoasDLL
    {
        Context context;

        public PessoasDLL()
        {
            context = new Context();
        }

        public IEnumerable<Pessoa> List()
        {
            return (from o in context.Pessoas 
                    join ende in context.Endereco on o.Codigo equals ende.CodPessoa
                    select o).ToList();
        }
        public List<Pessoa> ListaCompleta()
        {
            return (from o in context.Pessoas
                    join e in context.Endereco on o.Codigo equals e.CodPessoa
                    select o).ToList();
        }

        public void Insert(Pessoa pessoa)
        {
                context.Pessoas.InsertOnSubmit(pessoa);
                context.SubmitChanges();
        }

        public void Update(int codigo, Pessoa pessoa)
        {
            try
            {
                Pessoa p = context.Pessoas.SingleOrDefault(o => o.Codigo == codigo);

                p.Nome = pessoa.Nome;
                p.FantasiaApelido = pessoa.FantasiaApelido;
                p.Telefone = pessoa.Telefone;
                p.Telefone2 = pessoa.Telefone2;
                p.Contato = pessoa.Contato;
                p.CPFCNPJ = pessoa.CPFCNPJ;
                p.Email = pessoa.Email;
                p.InscricaoEstadual = pessoa.InscricaoEstadual;
                p.CliFor = pessoa.CliFor;
                p.PJPF = pessoa.PJPF;
                p.Situacao = pessoa.Situacao;

                context.SubmitChanges();
            }
            catch (Exception )
            {
                
            }
        }

        public void Delete(int CodPessoa)
        {
            Pessoa pessoa = context.Pessoas.Single(p => p.Codigo == CodPessoa);
            context.Pessoas.DeleteOnSubmit(pessoa);
            context.SubmitChanges();
        }
      
        public Pessoa getPessoa(int codigo)
        {
            return context.Pessoas.SingleOrDefault(e => e.Codigo == codigo);
        }

        public IEnumerable<Pessoa> getPessoaPorNomePorCodGrupo(string nome, int codGrupo)
        {
            //return context.Pessoas.Where(c => SqlMethods.Like(c.Nome, "%"+nome+"%")).SingleOrDefault(p => p.CodGrupo == codGrupo);
            return (from o in context.Pessoas.Where(ps => ps.CodGrupo == codGrupo && ps.Nome.Contains(nome)) select o).ToList();
        }

        public IEnumerable<Pessoa> ListPessoasPorNome(string nome)
        {
            return (from o in context.Pessoas.Where(ps => SqlMethods.Like(ps.Nome, "%" + nome + "%")) select o).ToList();
        }
        public IEnumerable<Pessoa> ListPessoaPorCidade(string NomeCidade)
        {
            return (from P in  context.Pessoas 
                    join E in context.Endereco.Where(ps => SqlMethods.Like(ps.Cidade, "%" + NomeCidade + "%")) on P.Codigo equals E.CodPessoa 
                    select P).ToList();
        }

        public IEnumerable<Pessoa> ListPessoasPorGrupo(int codGrupo)
        {
            return (from o in context.Pessoas.Where(ps => ps.CodGrupo == codGrupo) select o).ToList();
        }
        public Pessoa getCodigoPorNome(string nomePessoa)
        {
            return context.Pessoas.SingleOrDefault(e => e.Nome == nomePessoa);
        }
        public string ReturnNomePessoa(int codigo)
        {
            return context.Pessoas.SingleOrDefault(e => e.Codigo == codigo).Nome;
        }


    }
}
